package com.hospital.register.order.mapper;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.hospital.register.dto.order.OrderDayDto;
import com.hospital.register.dto.order.OrderPageDto;
import com.hospital.register.model.order.OrderInfo;
import com.hospital.register.vo.order.OrderDayVo;
import com.hospital.register.vo.order.OrderQueryVo;
import com.hospital.register.vo.order.OrderMessageVo;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;

/**
 * 访问订单数据
 *
 * @author 刘逸晖
 */
public interface OrderInfoMapper {

    /**
     * 新增订单
     *
     * @param orderInfo 订单信息
     * @return 新增的记录数
     */
    int insert(OrderInfo orderInfo);

    /**
     * 确认订单
     * 向院方提交订单后，更新提交结果
     *
     * @param order 院方返回的订单信息
     * @return 影响的记录数
     */
    int confirmInsertion(OrderMessageVo order);

    /**
     * 根据 id 查询订单
     *
     * @param id 订单的 id
     * @return 订单信息
     */
    OrderQueryVo selectById(@Param("id") Long id);

    /**
     * 分页查询订单列表
     *
     * @param page       页码和每页记录数
     * @param conditions 条件
     * @return 订单列表
     */
    Page<OrderQueryVo> selectPage(Page<OrderQueryVo> page, @Param("conditions") OrderPageDto conditions);

    /**
     * 根据订单的 id 更新状态
     *
     * @param id             订单的 id
     * @param oldOrderStatus 订单的原状态
     * @param newOrderStatus 订单的新状态
     * @return 影响的记录数
     */
    int updateStatusById(@Param("id") Long id, @Param("oldOrderStatus") Byte oldOrderStatus,
            @Param("newOrderStatus") Byte newOrderStatus, @Param("updateTime") Date updateTime);

    /**
     * 统计每天的订单数
     * @param conditions 条件
     * @return 统计结果
     */
    List<OrderDayVo> countEveryDayOrder(@Param("conditions") OrderDayDto conditions);

}
